Общий механизм работы

Работу механизма автоматического монтирования в Linux обеспечивают несколько компонентов.

  1. Служба autofs — запускает утилиту automount от имени суперпользователя в момент загрузки операционной системы. Это systemd-служба, входит в состав deb-пакета autofs.

  2. Утилита automount — обеспечивает расстановку ловушек монтирования и подключение целевых файловых систем общих ресурсов в соответствии с настройками из конфигурационных файлов, основными из которых являются /etc/autofs.conf и /etc/auto.master. Утилита входит в состав deb-пакета autofs.

  3. Файловая система autofs — монтируется утилитой automount в первоначальный набор каталогов, чтобы превратить их в так называемые триггерные узлы (англ. trigger nodes) или ловушки монтирования (англ. mount traps). Файловая система реализована в виде модуля ядра операционной системы autofs4.ko. Когда модуль файловой системы autofs перехватывает запрос пользователя к каталогу, в который еще не смонтирована целевая файловая система общего ресурса, модуль обращается к запущенному экземпляру утилиты automount для выполнения этой операции. Взаимодействие между модулем autofs4 и утилитой automount осуществляется через именованные каналы (англ. FIFO, first input first output), файлы которых можно найти по маске /var/run/autofs.fifo-*.

  4. Файловая система cifs — монтируется утилитой automount по запросу со стороны модуля ядра autofs4, когда пользователь обращается к файлам общего ресурса, для которого параметр «fstype» равен «cifs». Эта файловая система реализована в виде модуля cifs.ko.

  5. Утилита mount.cifs — вызывается утилитой automount для монтирования общих ресурсов по протоколу CIFS (SMB). Утилита входит в состав deb-пакета cifs-utils.

Рассмотрим работу механизма автоматического монтирования на примере простой общей папки с документами. Допустим, что в файле /etc/auto.master у нас определена строка для подключения карты косвенного монтирования /etc/auto.docs, а в карте /etc/auto.docs определена строка для монтирования общей папки share с файлового сервера fs-1.ald.company.lan в каталог /docs/share:

cat /etc/auto.master
...
/docs                                   /etc/auto.docs
...

cat /etc/auto.docs
share  -fstype=cifs,user,sec=krb5,cruid=$UID,uid=$UID,gid=$UID     ://fs-1.ald.company.lan/share

На данном этапе, файл /docs является ловушкой монтирования в виртуальной файловой системе autofs. При взаимодействии пользователя с ловушкой монтирования как с директорией, запускается процедура монтирования директории с файлового сервера общей папки share с файлового сервера fs-1.ald.company.lan в каталог /docs. Поэтому /docs до момента взаимодействия с пользователем не является директорией.

Таким образом, в момент запуска утилита automount выполняет следующие действия:

  • Загружает пространство имен, начиная с главного файла /etc/auto.master.

  • Создает каталог /docs, если его не было ранее.

  • Монтирует в каталог /docs файловую систему autofs, чтобы установить ловушку монтирования. Проверить это можно с помощью утилиты findmnt:

sudo findmnt
TARGET                       SOURCE                      FSTYPE        OPTIONS
...
└─/docs                      /etc/auto.docs              autofs        rw,relatime,fd=7,pgrp=10901...

Теперь при первом обращении пользователя к каталогу /docs/share, например, с помощью утилиты cd или ls, сработает ловушка монтирования, установленная на каталог /docs. Модуль файловой системы autofs обратится к утилите automount, которая создаст каталог share и смонтирует в него общую папку с файлового сервера с помощью утилиты mount. Проверить это можно с помощью утилиты findmnt:

root@pc-1:~# findmnt
TARGET                       SOURCE           FSTYPE        OPTIONS
/                            /dev/sda1        ext4          rw,relatime,errors=remount-ro
...
└─/docs                      /etc/auto.docs autofs     rw,relatime,fd=7,pgrp=10901,timeout=300,...
└─/docs/share              //fs-1.ald.company.lan/share   cifs        rw,nosuid,nodev,noexec,relatime, vers=3.1.1,sec=krb5,cruid=310400000,cache=strict,username=root,uid=310400000,noforceuid,gid=310400

Учитывая, что обычные пользователи работают с общими файловыми ресурсами не по прямым ссылкам, а из файлового менеджера, в файле /etc/autofs.conf рекомендуется установить параметр browse_mode = yes, чтобы имя общей папки share отображалось всегда, вне зависимости от того, примонтирована она или нет. По умолчанию установлено значение no для повышения производительности, но это актуально только в случае очень больших карт монтирования, в которых содержатся ссылки на десятки или даже сотни общих ресурсов. Не рекомендуется использование параметра --ghost в опциях монтирования карты auto.docs из главной карты, т.к. способ считается устаревшим.